package com.deliccio.service.impl;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.deliccio.dao.ClienteDAO;
import com.deliccio.dao.ColumnaDAO;
import com.deliccio.dao.DetallePedidoDAO;
import com.deliccio.dao.DetalleProductoDAO;
import com.deliccio.dao.EstadosgeneralesDAO;
import com.deliccio.dao.GridDAO;
import com.deliccio.dao.MesaDAO;
import com.deliccio.dao.ParametrosDAO;
import com.deliccio.dao.PedidoMesaDAO;
import com.deliccio.dao.PedidosDAO;
import com.deliccio.dao.ProductoDAO;
import com.deliccio.dao.RankingDAO;
import com.deliccio.dao.SucursalesDAO;
import com.deliccio.dao.UbicacionDAO;
import com.deliccio.entitys.Cliente;
import com.deliccio.entitys.Columna;
import com.deliccio.entitys.DetallePedido;
import com.deliccio.entitys.DetalleProducto;
import com.deliccio.entitys.Estadosgenerales;
import com.deliccio.entitys.Grid;
import com.deliccio.entitys.Mesa;
import com.deliccio.entitys.Parametros;
import com.deliccio.entitys.PedidoMesa;
import com.deliccio.entitys.Pedidos;
import com.deliccio.entitys.Producto;
import com.deliccio.entitys.Ranking;
import com.deliccio.entitys.Sucursales;
import com.deliccio.entitys.Ubicacion;
import com.deliccio.entitys.Usuario;
import com.deliccio.service.PedidosService;
import com.deliccio.util.BeanConsulta;

@Service("PedidosService")
public class PedidosServiceImpl implements PedidosService{

	@Autowired
	private ParametrosDAO parametrosDAO;

	@Autowired
	private ProductoDAO productoDAO;

	@Autowired
	private EstadosgeneralesDAO estadosgeneralesDAO;
	@Autowired
	private UbicacionDAO ubicacionDAO;
	@Autowired
	private DetallePedidoDAO detallePedidoDAO;
	@Autowired
	private PedidosDAO pedidosDAO;
	@Autowired
	private ClienteDAO clienteDAO;
	@Autowired
	private RankingDAO rankingDAO;
	@Override
	public List<Parametros> obtenerTiposProducto(){
		return parametrosDAO.obtenerConjuntos();
	}

	@Override
	public List<Producto> obtenerProductos(){
		return productoDAO.getTodos();
	}

	@Override
	public List<Ubicacion> obtenerUbicacionesSucursales(){
		return ubicacionDAO.obtenerUbicacionesSucursales();
	}

	@Override
	public int realizarDelivery(int[] productos,int[] cantidad,int[] mesas,int sucursal,Integer c,Ubicacion ubicacion){
		try{

			if(ubicacion != null){
				System.out.println(ubicacion);
				ubicacionDAO.guardar(ubicacion);
			}
			List<Producto> lstproductos=new ArrayList<Producto>();
			double precioTotal=0;
			if(productos.length > 0){
				for(int i=0;i < productos.length;i++){
					Producto p=productoDAO.get(productos[i]);
					precioTotal= (precioTotal + (p.getPrecioUnitario()*cantidad[i]));
					lstproductos.add(p);
				}
			}
			System.out.println(" precioTotal:+ "+precioTotal);
			Estadosgenerales estado=estadosgeneralesDAO.get(6);
			Cliente cliente=clienteDAO.get(c);			
			Date f=new Date();
			f.setTime(Calendar.getInstance().getTimeInMillis());
			System.out.println("ffff:"+f);
			Pedidos pedido=new Pedidos(precioTotal,f,f,new Date(),new Date(),f.getHours()+":"+f.getMinutes(),"",ubicacion,estado,cliente);
			pedido.setUbicacion(ubicacion);
			pedidosDAO.guardar(pedido);
			for(int i=0;i < lstproductos.size();i++){
				Producto product=lstproductos.get(i);
				Ranking r=rankingDAO.get(product.getId());
				r.setPuntos(r.getPuntos()+1);
				rankingDAO.guardar(r);
				DetallePedido detallePedido=new DetallePedido(product,product.getPrecioUnitario(),cantidad[i],pedido);
				detallePedidoDAO.guardar(detallePedido);
			}
			return 1;
		}catch(Exception e){
			e.printStackTrace();
			return 0;
		}
	}
}
